﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Waiter.Common;
using Waiter.Controler;
using DevComponents.DotNetBar.Controls;
using DevComponents.DotNetBar;

namespace Waiter.View
{
    public partial class frmRptSalary : DevComponents.DotNetBar.Office2007Form
    {
        int nMidMonthDay = 15;//Ngày giữa tháng.
        StaffCtrl myStaffCtrl = new StaffCtrl();
        ReportSalaryCtrl myRptSalaryCtrl = new ReportSalaryCtrl();

        public frmRptSalary()
        {
            InitializeComponent();
        }

        private void fsCreateInitDate()
        {
            CommonLogging.fsWriteLog(CommonConstants.LOG_TYPE_INFO, "frmRptSalary.fsCreateInitDate", "", "");
            //Lay ngay dau tuan
            DateTime input = DateTime.Now;
            int delta = DayOfWeek.Monday - input.DayOfWeek;
            DateTime monday = input.AddDays(delta - 7);

            //Lay ngay giua thang
            try
            {
                MASTER myMaster = CommonGlobalVariable.globalDataContext.MASTERs.SingleOrDefault(x => x.GROUP_CODE == CommonConstants.NGAY_GIUA_THANG & x.DEL_FLG == false);
                if (myMaster != null)
                {

                    nMidMonthDay = Convert.ToInt32(myMaster.VALUE);
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                MessageBoxEx.Show("Ngày giữa tháng được cài đặt không đúng, không thể tiếp tục xử lý.\nXin hãy kiểm tra lại.", CommonMessages.MSG_ERR_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }


            //RadioButton tuần này
            lbThisWeek.Text = monday.ToShortDateString() + " - " + monday.AddDays(6).ToShortDateString();

            //RadioButon Dau thang nay
            lbThisMonthFirst.Text = "1/" + DateTime.Now.Month + "/" + DateTime.Now.Year.ToString() + " - " + nMidMonthDay + "/" + DateTime.Now.Month.ToString() + "/" + DateTime.Now.Year.ToString();

            //RadioButton Cuoi thang nay
            lbThisMonthLast.Text = (nMidMonthDay + 1).ToString() + "/" + DateTime.Now.Month + "/" + DateTime.Now.Year + " - " + DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month).ToString() + "/" + DateTime.Now.Month.ToString() + DateTime.Now.Year.ToString();

            //DateStart
            dateStart.Value = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);

            //DateEnd
            dateEnd.Value = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month));

            //Load cmbStaff
            cmbStaff.DataSource = myStaffCtrl.fsGetAllStaffs_CalcSalary();
            cmbStaff.ValueMember = "CODE";
            cmbStaff.DisplayMember = "NAME";
        }


        private void frmRptSalary_Load(object sender, EventArgs e)
        {
            CommonLogging.fsWriteLog(CommonConstants.LOG_TYPE_INFO, "frmRptSalary.frmRptSalary_Load", "", "");
            this.fsCreateInitDate();
            this.lbSumSalary.Text = String.Empty;
        }

        private void headerItem1_Load(object sender, EventArgs e)
        {
            CommonLogging.fsWriteLog(CommonConstants.LOG_TYPE_INFO, "frmRptSalary.headerItem1_Load", "", "");
            this.headerItem1.init("BÁO CÁO LƯƠNG NHÂN VIÊN", false);
        }

        private void radCustomStaff_CheckedChanged(object sender, EventArgs e)
        {
            CommonLogging.fsWriteLog(CommonConstants.LOG_TYPE_INFO, "frmRptSalary.radCustomStaff_CheckedChanged", "", "");
            if (radCustomStaff.Checked == true)
            {
                cmbStaff.Enabled = true;
            }
            else
            {
                cmbStaff.Enabled = false;
            }
        }

        private void radCustomTime_CheckedChanged(object sender, EventArgs e)
        {
            CommonLogging.fsWriteLog(CommonConstants.LOG_TYPE_INFO, "frmRptSalary.radCustomTime_CheckedChanged", "", "");
            if (radCustomTime.Checked == true)
            {
                dateStart.Enabled = true;
                dateEnd.Enabled = true;
            }
            else
            {
                dateStart.Enabled = false;
                dateEnd.Enabled = false;
            }
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            CommonLogging.fsWriteLog(CommonConstants.LOG_TYPE_INFO, "frmRptSalary.btnSearch_Click", "", "");
            DateTime dStartTime = new DateTime();
            DateTime dEndTime = new DateTime();
            String strStaffCode = string.Empty;

            //Lấy thông tin thời điểm
            if (radThisMonthFirst.Checked == true)//Nữa tháng đầu
            {
                dStartTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1, 0, 0, 0);
                dEndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, nMidMonthDay, 23, 59, 59);
            }
            else if (radThisMonthLast.Checked == true)//Nữa tháng sau
            {
                dStartTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, nMidMonthDay + 1, 0, 0, 0);
                dEndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month), 23, 59, 59);
            }
            else if (radCustomTime.Checked == true)//Thời gian tùy chọn
            {
                if (dateStart.Value > dateEnd.Value)
                {
                    MessageBoxEx.Show("Thời gian không chính xác! Xin vui lòng kiểm tra lại.", CommonMessages.MSG_ERR_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    dateEnd.Focus();
                    return;
                }

                dStartTime = dateStart.Value;
                dEndTime = dateEnd.Value;
            }
            else// if (radThisWeek.Checked == true)
            {//Tuần này - mặc định

                //Tìm ngày đầu tuần
                DateTime input = DateTime.Now;
                int delta = DayOfWeek.Monday - input.DayOfWeek;
                DateTime monday = input.AddDays(delta - 7);

                dStartTime = new DateTime(monday.Year, monday.Month, monday.Day, 0, 0, 0);
                dEndTime = new DateTime(monday.AddDays(6).Year, monday.AddDays(6).Month, monday.AddDays(6).Day, 23, 59, 59);
            }

            //Lấy thông tin nhân viên
            if (radAllStaff.Checked == true)
            {
                strStaffCode = string.Empty;
            }
            else
            {
                strStaffCode = cmbStaff.SelectedValue.ToString();
            }

            //Tra cứu thông tin
            grdMain.DataSource = myRptSalaryCtrl.fsLoadListSalary(dStartTime, dEndTime, strStaffCode);

            //Tính tổng số tiền
            long nSumSalary = 0;
            for (int i = 0; i < grdMain.Rows.Count; i++)
            {
                nSumSalary += Convert.ToInt64(grdMain.Rows[i].Cells["colTOTAL_PAY_SALARY"].Value);
            }
            lbSumSalary.Text = nSumSalary.ToString("C0");
        }
    }
}

